/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modeladesktop.algoritmo;

import org.apache.commons.math.linear.RealMatrix;
import org.apache.commons.math.stat.correlation.Covariance;
import org.apache.commons.math.stat.correlation.PearsonsCorrelation;
import java.util.logging.*;
import org.apache.commons.math.*;
import modeladesktop.gui.*;

/**
 *
 * @author Administrador
 */
public class Coeficientes {

    public Coeficientes() {
    }

    /*     este metodo te regresa una matriz double con la matriz de correlacion de parametros le tenes que poner la matriz
     *     con las variables una matriz de "CantidadDatos*NumeroDeVariables"
     */

	    //regresa la matriz para los valores de p referentes a la comparacion de cada variable con la otra
    public static double[][]  valoresP(double[][] data, Analisis analiza) {

        PearsonsCorrelation pc = new PearsonsCorrelation(data);
        RealMatrix m=null;
        try {
            m = pc.getCorrelationPValues();
        } catch (MathException ex) {
            Logger.getLogger(Coeficientes.class.getName()).log(Level.SEVERE, null, ex);
        }
        double[][] datitos = m.getData();

		for(int i = 0; i < analiza.analisisRegresion.length; i++)
			analiza.analisisRegresion[i][3] = datitos[i][0];

		System.out.println("PPPPPPPPPPPPP");
		for(double[] dou: datitos){
			for(double dat : dou)
				System.out.print(" - "+dat);
			System.out.println();
		}
        return datitos;
    }
	
	    public static double[][]  regMultSE(double[][] data) {

        PearsonsCorrelation pc = new PearsonsCorrelation(data);
        RealMatrix m=null;
        //try {
            m = pc.getCorrelationStandardErrors();
        /*} catch (MathException ex) {
            Logger.getLogger(Coeficientes.class.getName()).log(Level.SEVERE, null, ex);
        }*/
        
        return m.getData();
    }
	
	//le mandas la misma matriz que a las demas y te regresa un vector de tamanio la cantidad de variables que tengas...
	//ej posicion 0 para el fiv de la primera variable, pos 1 para el fiv de la segunda variable etc.
        public static double[] getFiv(double[][] data, Analisis analiza){

        PearsonsCorrelation pc = new PearsonsCorrelation();
        RealMatrix m = pc.computeCorrelationMatrix(data);
         double[] listfiv = new double[data.length-1];
        double[][] mat = m.getData();


        for(int y = 1 ; y < mat.length ; y++){

            for(int x = 0; x < 1; x++){
               float Rq =(float)Math.pow(mat[y][x],2);
               float fiv = 1/(1-Rq);
               listfiv[y-1] = fiv;
            }
            System.out.println(listfiv[y-1]);
        }
		for(int i = 0; i < analiza.analisisRegresion.length-1; i++)
			analiza.analisisRegresion[i+1][4] = listfiv[i];

        return listfiv;
    }

    public static Object[][] matCorrelacion(double[][] data) {



        /* aqui mandas una matriz...con las variables que querras incluir dentro del analisis de la matriz
         * de correlacion en esta matriz que te puse aqui esta [y,x1,x2]
         */
        /*double[][] data = {
        {11,1,3},
        {12,2,5},
        {13,5,3},
        {14,6,1},
        {15,3,7},
        {16,2,2}};
		*/
        PearsonsCorrelation pc = new PearsonsCorrelation();
        RealMatrix m = pc.computeCorrelationMatrix(data);
		double [][] dbl = m.getData();

		Object datos[][] = new Object[dbl.length][dbl[0].length];
		for(int i = 0; i < dbl.length; i++)
			for(int j = 0; j < dbl[i].length; j++)
				datos[i][j] = dbl[i][j];
        return datos;

    }
    /*  este metodo te regresa una matriz double con la matriz de covarianza de parametros le tenes que poner la matriz
     *  con las variables una matriz de "CantidadDatos*NumeroDeVariables"
     */
    public static double[][] matCovarianza(double[][] data) {

        /* aqui mandas una matriz...con las variables que querras incluir dentro del analisis de la matriz
         * de covarianza en esta matriz que te puse aqui esta [y,x1,x2]
         */
        /*double[][] data = {
        {11,1,3},
        {12,2,5},
        {13,5,3},
        {14,6,1},
        {15,3,7},
        {16,2,2}};*/

        Covariance cov = new Covariance(data);
        RealMatrix c = cov.getCovarianceMatrix();


        return c.getData();
    }
}
